import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description: 牛客网: MT5 字符串计数
 * <a href="https://www.nowcoder.com/practice/f72adfe389b84da7a4986bde2a886ec3?tpId=128&tqId=33772&ru=/exam/oj">...</a>
 * User: DELL
 * Date: 2023-05-29
 * Time: 15:16
 */
public class Main {
    /**
     * 解题思路:
     * 在解答本题之前,我们首先要知道一个解题技巧,这里用数字来举例.
     * 当我们要找大小在 10~26 之间的数字,我们是通过 26-10-1 = 15 来求出来的,同样的,
     * 我们要求字节序在 10~26 之间长度为2的字符串的数量,也等于 26-10-1 = 15,因此我
     * 们可以将这个类比到求字符串中,即将字符串中的每一个字符看成是26进制中的一个数字,因此
     * 假如我们要求的是 ab~ce 字节序之间长度为2的字符串的数量,答案应该是 ce-ab-1
     * 这里因为我们将每一个字符看成是26进制中的一个数字,因此依据运算规则,我们的计算应该如下:
     * (c-a)*26^1 + (e-b)*26^0 - 1 = 52 + 3 - 1 = 54
     * 而在 ab~ce 字节序之间长度为 1 的字符串的数量为 b 和 c,即总共 56个,因此验证了上述
     * 方法的可行性.因此,通过上述总结,对于两个源字符串长度相等,且要求的字符串长度与源字符串长度
     * 相等时,我们利用上述方法就可以很轻易的求出来.
     * 而对于上面方法中的两个前提,即 1.两个源字符串长度相等 2. 要求的字符串长度与源字符串长
     * 度相等  这两个条件在题目中均没有规定,即这两个前提没有成立,因此接下来我们讨论如何应对.
     * 1. 两个源字符串 s1 和 s2 长度不相等
     *    1) s1 的长度较小
     *       这种情况下,假设 s1=ab s2=cde,且要求目标字符串的长度为 3时,我们可以给s1补
     *       上一个字符使得 s1 的长度等于 s2 的,而我们补谁呢? 首先想到的应该是补 a,那么
     *       就成了求 aba~cde 字节序之间长度为3的字符串的数量,即通过上面论述的方法是可以
     *       很轻易的求出的,而是否求出来的就是正确的呢,显然不是,因为 aba 也满足大于 s1,
     *       小于s2,因此这种情况下,我们要将最后的结果 +1 即可.
     *       即先将 s1 不足位补 a,最后求出的结果再 +1即可.
     *    2) s2 的长度较小
     *       这种情况下,假设 s1=ab s2=c,且要求目标字符串的长度为 2 时,我们想到的也应该是
     *       给 s2 补一个字符,那么补谁合适呢,很显然我们要补的也应该是 a,即将 s2 补为 ca,
     *       因此就成了求 ab~ca 字节序之间长度为 2 的字符串的数量,这里你们可以自行验证一下,
     *       求出来的结果是合理的
     *    即通过上面讨论的两个处理方法,我们总可以把 s1 和 s2 处理成一样长度的字符串,因此接下
     *    来就来考虑一下要求的字符串长度与源字符串长度不等时的处理方法
     * 2. 要求的字符串长度与源字符串长度不等
     *    假设处理过后 s1 和 s2 的长度为 len
     *    1) 目标字符串长度小于 len
     *       这种情况下比如我们要求 abc~def 中符合要求的长度为2的字符串的数量,那么我们不需要
     *       管第三位,直接管前两位即可.
     *    2) 目标字符串长度大于 len
     *       这种情况下比如我们要求 abc~def 中符合要求的长度为4的字符串的数量,那么我们可以求出
     *       abc~def 中符合要求的长度为3的字符串的数量,同时这种情况中包含的情况,其第四为的字符
     *       可以说随意一个字符都满足情况,因此把 求出来的结果*26 即可,但是这样子之后有两个特殊的
     *       情况我们需要处理,即前三位是 abc 或 def 的字符串,有没有可能也满足要求,显然是有的,
     *       即根据字典序的规则,abc + 任意一个字符 的字典序都是大于 abc的,同时 def + 任意一
     *       个字符的字典序都是大于 def 的,因此只需要将 求出来的结果*26 + 26 即可,其实这里有
     *       一个很巧妙的处理,就是 s1 的不足位补上 'a', 将 s2 的不足位补上 'z+1',这样子处理
     *       后,就相当于是将 求出来的结果*26 + 26,(这里需要仔细思考一下)
     * @param args
     */
    public static void main(String[] args){
        Scanner scan =  new Scanner(System.in);
        while(scan.hasNext()){
            String s1 =scan.next();
            String s2 = scan.next();
            int len1 =scan.nextInt();
            int len2 = scan.nextInt();
            // 先拿到s1的长度，如果小于len2，就给它补相应的位数，由于它是起始位，所以补a
            for(int i=s1.length();i<len2;i++){
                s1 +='a';
            }
            // 拿到s2的长度，如果小于len2，也给它补相应的位数，由于它是结束位，所以补'z'+1
            for(int i=s2.length();i<len2;i++){
                s2+='z'+1;
            }
            // 用一个数组，记录两个字符串对应位相减的值， 比如s1补位后为 aba，s2补位后为 ce('z'+1)，arr数组记录的值是 {2，3，26}
            int[] arr = new int[len2];
            // 由于下标比长度小1，所以是取不到len2的
            for(int i=0;i<len2;i++){
                arr[i] = s2.charAt(i)-s1.charAt(i);
            }
            // 用一个变量记录总的数值
            int sum = 0;
            // 从长度len1开始，依次计算每个长度下的字符串个数，这里能取到len2
            for(int i= len1;i<=len2;i++){
                // 每个长度下，都从arr数组中取值，让它乘以相应的26的次方，比如数组中是{2，3}，len为2时，就是2*Math.pow(26,1)+3*Math.pow(26,0)。
                // len为3时，就是 2*Math.pow(26,2)+3*Math.pow(26,1)
                for(int j=0;j< i;j++){
                    // 次方既受 len的影响，也受位数的影响，所以是 i-j-1
                    sum+=arr[j]* Math.pow(26,i-1-j);
                }
            }
            System.out.println((sum-1)%1000007);
        }
    }
}
